package DAO;

import Bean.Persona;
import DataBase.TransacionException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Sixviv
 */
public class DAOPersona extends  AbstractDAO<Persona>{

    @Override
    public void insertar(Persona objecto) throws TransacionException {
        String sql = "insert into persona(nombre,usuario,password)values(?,?,?);";
        try {
            this.adminConsulta.iniciar();
            List<Object> params = new ArrayList();
            params.add(objecto.getNombre());
            params.add(objecto.getUsuario());
            params.add(objecto.getPassword());
            objecto.setIdPersona(adminConsulta.doUpdateWithKey(sql, params));
            this.adminConsulta.finalizar();
        } catch (SQLException ex) {
            adminConsulta.rollBack();
        }
    }

    @Override
    public void borrar(String condicion) throws TransacionException {
        String sql = "delete from persona where idPersona= ? ";
        try{
            this.adminConsulta.iniciar();
            List<Object> params = new ArrayList();
            params.add(condicion);
            this.adminConsulta.doUpdate(sql, params);
            this.adminConsulta.finalizar();
        }catch (SQLException ex) {
            adminConsulta.rollBack();
        }
    }

    @Override
    public void actualizar(Persona entidad, String condicion) throws TransacionException {
        String sql = "update persona set nombre = ?, usuario = ?, password = ? where idPersona = ?";
        try{
            this.adminConsulta.iniciar();
            List<Object> params = new ArrayList();
            params.add(entidad.getNombre());
            params.add(entidad.getUsuario());
            params.add(entidad.getPassword());
            params.add(condicion);
            adminConsulta.doUpdate(sql, params);
            this.adminConsulta.finalizar();
        }catch(SQLException ex){
            adminConsulta.rollBack();
        }
    }

    @Override
    public List<Persona> buscar(String condicion, List<Object> params) {
         List<Persona> result=null;
         String sql = "select * from persona "+condicion;
         pstmt= adminConsulta.prepareTheStatementForQuery(sql, params);
        result = adminConsulta.ejecutarSeleccion(pstmt, Persona.class);
        return result;
    }
    
    public List<Persona> getPersonas(){
        return buscar(null,null);
    }
    
    public List<Persona> getPersonaById(String id){
        String condicion = "where idPersona = ?";
        List<Object> params = new ArrayList();
        params.add(id);
        return buscar(condicion,params);
    }
    
    public List<Persona> getPersonaByUser(String user){
        String condicion = "where usuario = ?";
        List<Object> params = new ArrayList();
        params.add(user);
        return buscar(condicion,params);
    }
}
